package fwmpc.store;

import frpc.manager.SimpleRedisBaskManager;
import fwmpc.exception.WeiXinRuntimeException;
import fwmpc.resource.IWeiXinAttributeItem;
import fwmpc.resource.IWeiXinCommonAttribute;
import lombok.extern.slf4j.Slf4j;

import java.io.UnsupportedEncodingException;

/**
 * 类描述:  微信配置属性存储处理抽象
 *
 * @author 王雷
 * @version 1.0.0
 * @date : 2022/6/28 0028 下午 4:58
 */
@Slf4j
public abstract class AbstractWeiXinInStorageBasicService extends SimpleRedisBaskManager implements IWeiXinAttributeStore {

    /**
     * 属性描述：微信属性配置存储标识
     *
     * @date : 2022/6/27 0027 下午 8:56
     */
    public static final String REDIS_WEI_XIN_ATTRIBUTE_CONFIG_CACHE_KEY = "Wei_Xin_Attribute_Config_";

    /**
     * 属性描述：微信属性描述对象
     *
     * @date : 2022/6/28 0028 下午 5:02
     */
    protected final IWeiXinCommonAttribute iWeiXinCommonAttribute;

    /**
     * 功能描述：微信配置属性存储处理
     *
     * @date : 2022/6/28 0028 下午 4:58
     */
    public AbstractWeiXinInStorageBasicService(IWeiXinCommonAttribute iWeiXinCommonAttribute) {
        this.iWeiXinCommonAttribute = iWeiXinCommonAttribute;
    }

    /**
     * 功能描述：初始化并获取微信配置
     *
     * @param appId 配置的识别Key
     * @return 初始化结果
     * @date : 2022/6/28 0028 下午 5:01
     */
    protected IWeiXinAttributeItem initWeiXinAttributeData(String appId) throws WeiXinRuntimeException {
        return this.iWeiXinCommonAttribute.initAttribute(appId);
    }

    /**
     * 功能描述：微信访问地址——换取Token地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 9:07
     */
    @Override
    public String giveCodeUrl() {
        return iWeiXinCommonAttribute.giveCodeUrl();
    }

    /**
     * 属性描述：微信访问地址——获取OpenID地址
     *
     * @date : 2022/11/26 0026 下午 8:23
     */
    @Override
    public String giveOpenIdUrl() {
        return iWeiXinCommonAttribute.giveOpenIdUrl();
    }

    /**
     * 功能描述：微信访问地址——换取Token地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 9:07
     */
    @Override
    public String giveWebTokenUrl() {
        return iWeiXinCommonAttribute.giveWebTokenUrl();
    }

    /**
     * 属性描述：微信访问地址——推送模版消息
     *
     * @date : 2023/2/1 0001 上午 9:57
     */
    @Override
    public String giveSendTemplateMessageUrl() {
        return iWeiXinCommonAttribute.giveSendTemplateMessageUrl();
    }

    /**
     * 功能描述：微信访问地址——换取Ticket地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 9:07
     */
    @Override
    public String giveWebTicketUrl() {
        return iWeiXinCommonAttribute.giveWebTicketUrl();
    }

    /**
     * 功能描述：微信访问地址——换取Token地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 9:07
     */
    @Override
    public String givePaymentLink() {
        return "#{[CodeUrl]}?appid=#{[AppId]}&redirect_uri=#{[PayCallBackUrl]}&response_type=code&scope=snsapi_base";
    }

    /**
     * 功能描述：微信访问地址——获取用户信息地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:49
     */
    @Override
    public String giveUserInfoUrl() {
        return iWeiXinCommonAttribute.giveUserInfoUrl();
    }

    /**
     * 功能描述：微信访问地址——换取Access_Token地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveAccessTokenUrl() {
        return iWeiXinCommonAttribute.giveAccessTokenUrl();
    }

    /**
     * 功能描述：微信访问地址——刷新Token地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveRefreshAccessTokenUrl() {
        return iWeiXinCommonAttribute.giveRefreshAccessTokenUrl();
    }

    /**
     * 功能描述：微信访问地址——换取JsapiTicket地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveJsapiTicketUrl() {
        return iWeiXinCommonAttribute.giveJsapiTicketUrl();
    }

    /**
     * 功能描述：微信访问地址——下单地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveUnifiedOrderUrl() {
        return iWeiXinCommonAttribute.giveUnifiedOrderUrl();
    }

    /**
     * 功能描述：微信访问地址——退款地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveRefundPayOrderUrl() {
        return iWeiXinCommonAttribute.giveRefundOrderUrl();
    }

    /**
     * 功能描述：微信访问地址——提现地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveWithdrawUrl() {
        return iWeiXinCommonAttribute.giveWithdrawUrl();
    }

    /**
     * 功能描述：微信访问地址——查询订单地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveSearchOrderUrl() {
        return iWeiXinCommonAttribute.giveSearchOrderUrl();
    }

    /**
     * 功能描述：微信访问地址——关闭订单地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveCloseOrderUrl() {
        return iWeiXinCommonAttribute.giveCloseOrderUrl();
    }

    /**
     * 功能描述：微信访问地址——下单回调接口
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String givePayCallBackUrl(String appId) {
        return giveWeiXinCommonAttribute(appId).givePayCallBackUrl();
    }

    /**
     * 功能描述：微信访问地址——下单回调接口
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String givePayCallBackUrlEncodeUrl() throws UnsupportedEncodingException {
        return iWeiXinCommonAttribute.giveCodeUrlEncodeUrl();
    }

    /**
     * 功能描述：微信访问地址——获取二维码地址
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String giveGenerateQrCodeUrl() {
        return iWeiXinCommonAttribute.giveGenerateQrCodeUrl();
    }

    /**
     * 功能描述：微信访问地址——获取素材总数
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String giveMaterialCountUrl() {
        return iWeiXinCommonAttribute.giveMaterialCountUrl();
    }

    /**
     * 功能描述：微信访问地址——获取素材列表
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String giveMaterialDataUrl() {
        return iWeiXinCommonAttribute.giveMaterialDataUrl();
    }

    /**
     * 功能描述：微信访问地址——获取素材总数
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String giveWxMenuUrl() {
        return iWeiXinCommonAttribute.giveWxMenuUrl();
    }

    /**
     * 功能描述：微信访问地址——获取素材列表
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String giveUpdateWxMenuUrl() {
        return iWeiXinCommonAttribute.giveUpdateWxMenuUrl();
    }

    /**
     * 功能描述：微信访问地址——是否关注
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String giveIsAttentionUrl() {
        return iWeiXinCommonAttribute.giveIsAttentionUrl();
    }

    /**
     * 功能描述：微信访问地址——批量为用户打标签
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String giveBatchUserByTagUrl() {
        return iWeiXinCommonAttribute.giveBatchUserByTagUrl();
    }

    /**
     * 功能描述：根据枚举获取对应的存储数据
     *
     * @param appId 配置的识别Key
     * @return 对应存储的配置信息
     * @throws RuntimeException 运行时异常
     * @author : 王雷
     * @date : 2021/1/18 0018 上午 11:14
     */
    @Override
    public IWeiXinAttributeItem giveWeiXinCommonAttribute(String appId) throws WeiXinRuntimeException {
        return null;
    }
}
